State is a behavioral design pattern that lets an object alter its behavior when its internal state changes. It appears as if the object changed its class.
--Refactoring Guru
狀態模式是一種行為型設模式,它允許物件在內部狀態改變時改變自身的行為。使其看起來就像改變了它的所屬類別。
--圖片來源: Refactoring Guru
狀態模式通常用在以下情境中:
物件行為的不同狀態:
當一個物件在不同情況下有不同的行為,而且在運行時需要能夠切換這些行為,狀態模式可以派上用場。
例如,交通號誌的控制,一個交通號誌可以有紅燈、綠燈、和黃燈三種狀態,每個狀態下燈號的行為不同。
減少大量的條件判斷:
當你的程式碼中有大量的if-else或switch-case語句,且這些語句根據物件的狀態而改變,使用狀態模式可以幫助減少這些判斷,使程式碼更加清晰和可維護。
狀態轉換的靈活性:
當狀態之間的轉換規則需要根據應用的需求而靈活變化時,狀態模式有助於將轉換邏輯集中在相應的狀態類別中,使其更容易擴展和修改。
當物件的行為與其狀態有關時:
如果一個物件的行為與其內部狀態直接相關,且這些狀態在運行時可能改變,狀態模式提供了一個組織這些行為的有效方式。
總之,狀態模式適用於需要管理物件多種狀態,並根據這些狀態改變行為的情境,有助於提高程式碼的可維護性和可擴展性。
狀態模式通常包括以下元素:
翻譯如下:
State(狀態):
這是一個由上下文物件使用的介面。該介面定義了子類別將以自己的方式實作的行為。
ConcreteStateA/B/...(具體狀態A/B/...):
這些將是實現 State介面並提供上下文物件將 使用的功能的 具體類別。每個具體狀態類別提供了適用於上下文對象的單個狀態的行為。
Context(上下文):
這個類別將保存一個提供根據其當前狀態提供行為的具體狀態物件。這個類別會被客戶端使用。